#ifndef __CLIENT_H__
#define __CLIENT_H__

// 导入项目头文件
#include <head.h>
#include "udp.h"
#include "tcp.h"
#include "client.h"
#include "utils.h"

// 定义宏定义
#define LOG_FILE "log/error.log" // 报错日志文件
#define SIZE 1024
#define NOW_MAX 20
#define SER_IP "192.168.10.47"
#define SER_PORT 6789

// 错误输出宏定义，写入日志文件并显示在终端
#define ERRLOG(msg)                                                                                                           \
    do                                                                                                                        \
    {                                                                                                                         \
        time_t now = time(NULL);                                                                                              \
        char *timestr = ctime(&now);                                                                                          \
        timestr[strlen(timestr) - 1] = '\0'; /* 去掉末尾的换行符 */                                                   \
        FILE *log_file = fopen(LOG_FILE, "a");                                                                                \
        if (log_file)                                                                                                         \
        {                                                                                                                     \
            fprintf(log_file, "[%s] 错误: %s\t文件: %s\t函数: %s\t行号: %d\n\n", timestr, msg, __FILE__, __func__, __LINE__); \
            fclose(log_file);                                                                                                 \
        }                                                                                                                     \
        else                                                                                                                  \
        {                                                                                                                     \
            fprintf(stderr, "错误: 无法打开日志文件: %s\n", LOG_FILE);                                                        \
        } /* 输出到标准错误流 */                                                                                      \
        fprintf(stderr, "[%s] 错误: %s\t文件: %s\t函数: %s\t行号: %d\n", timestr, msg, __FILE__, __func__, __LINE__);         \
    } while (0)

typedef struct msg // 表示聊天时的信息
{
    char msg[SIZE];     // 消息内容
    char localname[20]; // 消息目的名称
    char account[20];   // 账户
    char fromname[20];  // 消息来源名称
    char password[20];  // 用户密码
    char signname[40];  // 个性签名
    int cmd;            // 工作模式
    int num;            // 用于保存文件复制的字节数
} Msg;

#endif
